/*
	题目：输入一个整数，输出该数二进制表示中1的个数。其中负数用补码表示。
*/

/*
	思路：数值型在计算机里都是以补码的形式进行表示和存储的，对于一个整数n，
	除了0以外其补码至少会有1个1，如果对该补码-1，会发现最后边的1变成0，
	而1后边的0都会变成1（假如存在0的话），比如：1100->1011，将1011与1100进行&运算，
	得到了1000，我们可以发现，结果比起原补码少了一个最右边的1。如果补码原本有n个1，
	那么只要进行n次以上的运算就可以变成0，这个循环的次数就是原补码的1的个数。
*/

/*
	附：java有提供一个方法直接求整型补码中的1的个数。
	Integer.bitCount(int i);
*/

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n != 0){
            count++;
            n = n & (n-1);
        }
        return count;
    }
}